package dejava.bolsadetrabajo.repository.jdbc;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import dejava.bolsadetrabajo.repository.AnuncianteRepository;
import dejava.bolsadetrabajo.repository.model.Anunciante;
import dejava.bolsadetrabajo.repository.model.Curriculum;
import dejava.bolsadetrabajo.repository.model.Postulante;

public class AnuncianteRepositoryJdbc implements AnuncianteRepository {

	@Override
	public Postulante obtenerDatosPostulante(int idpos) throws SQLException {

		Postulante p = new Postulante();
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "";
		sql += "{ call sp_ObtenerDatosPostulante(?) }";

		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/bolsatrabajo", "root", "ojbo");

			ps = conn.prepareStatement(sql);
			ps.setInt(1, idpos);
			rs = ps.executeQuery();

			CallableStatement prc = conn.prepareCall(sql);
			prc.setInt(1, idpos);
			rs = prc.executeQuery();

			while (rs.next()) {

				p.setNombre(rs.getString("nombre"));
				p.setCorreo(rs.getString("correo"));
				p.setTitulo(rs.getString("titulo"));

			}
		} catch (Exception except) {
			SQLException ex = new SQLException(
					"Error Establishing Connection: " + except.getMessage());
			throw ex;
		} finally {
			if (rs != null) {
				try {
					// Close to prevent database cursor exhaustion
					rs.close();
				} catch (SQLException ex) {
				}
			}
			if (ps != null) {
				try {
					// Close to prevent database cursor exhaustion
					ps.close();
				} catch (SQLException ex) {
				}
			}
			if (conn != null) {
				try {
					// Close to prevent database connection exhaustion
					conn.close();
				} catch (SQLException ex) {
				}
			}
		}
		return p;
	}

	@Override
	public List<Curriculum> obtenerProfesionales(String strTipo,
			String strEspecialidad, String strIndustria, String strUbicacion)
			throws SQLException {

		List<Curriculum> listcu = new ArrayList<Curriculum>();

		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		String sql = "";
		sql += "{ call sp_ObtenerCurriculumPorCriterios(?,?,?,?) }";

		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/bolsatrabajo", "root", "ojbo");

			CallableStatement prcProcedimientoAlmacenado = conn
					.prepareCall(sql);
			prcProcedimientoAlmacenado.setString(1, strTipo);
			prcProcedimientoAlmacenado.setString(2, strEspecialidad);
			prcProcedimientoAlmacenado.setString(3, strIndustria);
			prcProcedimientoAlmacenado.setString(4, strUbicacion);

			rs = prcProcedimientoAlmacenado.executeQuery();

			while (rs.next()) {
				Curriculum c = new Curriculum();
				c.setIdCurriculum(rs.getInt("idCurriculum"));
				listcu.add(c);
			}
		} catch (Exception except) {
			SQLException ex = new SQLException(
					"Error Establishing Connection: " + except.getMessage());
			throw ex;
		} finally {
			if (rs != null) {
				try {
					// Close to prevent database cursor exhaustion
					rs.close();
				} catch (SQLException ex) {
				}
			}
			if (ps != null) {
				try {
					// Close to prevent database cursor exhaustion
					ps.close();
				} catch (SQLException ex) {
				}
			}
			if (conn != null) {
				try {
					// Close to prevent database connection exhaustion
					conn.close();
				} catch (SQLException ex) {
				}
			}
		}
		return listcu;
	}

	@Override
	public List<Anunciante> obtenerEmpresasPorDestacadasoPorTodas(String strTipo)
			throws SQLException {
		List<Anunciante> oAnunciantes = new ArrayList<Anunciante>();

		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		String sql = "";
		sql += "{ call sp_ObtenerEmpresasDestacadasPorTodas(?) }";

		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/bolsatrabajo", "root", "ojbo");

			CallableStatement prcProcedimientoAlmacenado = conn
					.prepareCall(sql);

			prcProcedimientoAlmacenado.setString(1, strTipo);
			rs = prcProcedimientoAlmacenado.executeQuery();

			while (rs.next()) {
				Anunciante oAnunciante = new Anunciante();

				oAnunciante.setRazSocial(rs.getString("RAZSOCIAL"));
				oAnunciante.setCantAnuncios(rs.getInt("CANT"));
				oAnunciantes.add(oAnunciante);
			}
		} catch (Exception except) {
			SQLException ex = new SQLException(
					"Error Establishing Connection: " + except.getMessage());
			throw ex;
		} finally {
			if (rs != null) {
				try {
					// Close to prevent database cursor exhaustion
					rs.close();
				} catch (SQLException ex) {
				}
			}
			if (ps != null) {
				try {
					// Close to prevent database cursor exhaustion
					ps.close();
				} catch (SQLException ex) {
				}
			}
			if (conn != null) {
				try {
					// Close to prevent database connection exhaustion
					conn.close();
				} catch (SQLException ex) {
				}
			}
		}

		return oAnunciantes;
	}

}
